Vagrantって流行ってるらしいけど何が便利なの?
最近、Vagrant(ベイグラント)を勉強し始めました。VagrantはVirtual Boxなどの仮想化ソフトウェアと一緒に使うツールです。
最初は何のために使うものなのかよくわからず、VagrantはVirtual Boxのフロントエンドだよ、
と言われても何が便利なのかいまいちピンと来なかったのでいろいろ調べてみました。
※Vagrantはプロバイダ(仮想化ソフトウェア)を選択できるので、他にもVMwareやAmazon EC2で使うこともできます。
実現したいこと
VagrantとVirtual Boxを使って何がしたいのかの一覧です。
- 実行環境を開発と本番で揃えたい。
- 開発環境を構築する際に個人のローカル環境に依存しないようにしたい。
- すぐに使える仮想環境を構築したい。
- 環境構築を自動化したい。
- チームで同一の環境を簡単に構築したい。
1つずつ見ていきましょう。
Virtual Boxだけでもできること
1,2 はVirtual Boxだけでも実現できます。最初はこの辺が自分の中で整理されていなかったので、よく分からなかったのだと思います。
実行環境を開発と本番で揃えたい
ローカルに本番と同じ環境を構築しそこで実行することで、ローカルではちゃんと動いたけど本番環境やステージング環境で動かなくなったということがなくなります。
仮想マシン上でプログラミングすることもできますが、Virtual Boxの共有フォルダを利用すればホストOS上のツールを使って開発することもできます。
実装したプログラムを共有フォルダに置いて、仮想環境のWebサーバやアプリケーションサーバなどから参照できるようにします。
開発環境を構築する際に個人のローカル環境に依存しないようにしたい
プロジェクト内に開発用端末としてWindowsを使っている人とMac使っている人が混在している場合でも、
仮想環境でプログラムを実行するようにすれば環境構築手順がほとんど同じになります。
すぐに使える仮想環境を構築したい
Vagrantはすぐに使いたいテスト環境を構築する場合に便利です。公開されているBoxファイルを使うのであれば、コマンド1つでダウンロードできます。
Boxファイルとはテンプレートのようなものです。isoファイルをダウンロードしてOSインストールから始めるよりかは早く使えます。
※Virtual Box単体でも仮想マシンのインポート、エクスポートすることは可能です。
私は以下の記事を見ながら試してみました。
Vagrantを使って仮想OSを簡単に作成しよう
Vagrantbox.es というサイトで有志の方が作ったBoxファイルをダウンロードすることもできますが、
安全である保証がないので私は業務で使う場合は自分でBoxファイル作ると思います。
veewee(ビーウィー)というプラグインを使えばBoxファイルを作成できます。
環境構築を自動化したい
開発環境を構築する際、通常は環境構築手順書を見ながら開発者が自分のローカル環境に構築します。
環境構築を自動化してしまえば環境構築する手間と環境構築手順書を書く手間を省けます。
Vagrant は Chef、puppet などの構成管理ツールと連携して環境構築を自動化できます。
私は以下の記事を見ながら Chef を試してみました。
Vagrant + Chefで環境構築も自動にする
チームで同一の環境を簡単に構築したい
ネットワーク上にあるBoxファイルを共有することが容易なのでチームで同一の環境を構築することが簡単にできます。
やったことありませんが、以下のような流れになるのでしょうか。
チーム開発する際の手順
- 誰か一人の端末で仮想マシンにOSをインストールし、Chef を使って環境構築する。
- 環境に問題がないことを確認した後、Boxファイルを作成し、Vagrantfile、レシピと一緒に他のメンバーに共有する。
- メンバーは仮想化ソフトとVagrantをインストールする。
- メンバーはコマンドでBoxファイルをダウンロードし、共有されたVagrantfileで仮想マシンを起動する。
vagrant up した時点で自動で環境は構築されます。
開発を進めていくとライブラリを追加したくなったり、ミドルウェアをコンパイルし直したくなるかもしれません。
その場合は修正したレシピを共有して、vagrant up や vagrant provision などのコマンドを実行すると差分が反映されます。
その他
その他、VagrantとVirtual Boxに関していろいろ調べて分かったこと。
コマンドラインを使った操作
Vagrantはコマンドラインで使えるからスクリプトとか書けて便利なのかな?
と思っていましたがVirtual BoxでもVBoxManageコマンドを使って、CUIで仮想マシンの起動、スナップショットの取得などは行えるようです。
複数の仮想マシンを起動する
Virtual BoxのGUIのツールでも複数仮想マシンを起動することができますが、Vagrantでは1つの設定ファイル(Vagrantfile)で管理することができます。
コマンド1つで複数のサーバを起動できるので便利です。
スナップショット
Virtual Boxのスナップショット機能を使えば、以前の状態に元に戻すことができます。
Vagrantではsaharaプラグインを入れることによりスナップショットと同じような機能をvagrantコマンドで使えるようになります。
私は以下の記事を見ながら、saharaプラグインを試してみました。
saharaプラグインで仮想OS状態を管理する
プラグインで機能拡張できる
上にちょっと書きましたが、Vagrantはプラグインによって機能を拡張することができます。
まだsaharaとveeweeしか知らないので、今後いろいろ試してみようと思ってます。
まとめ
ひととおり自分でもやってみたのですが、VagrantはChefなどの構成管理ツールと連携させると真価を発揮するツールという印象でした。
今度、PHP案件などを担当することがあったら導入を検討したいと思います。